// 用于往Vue原型上挂载功能代码
import Vue from 'vue'
import { uploadDocument } from '@/api/documentModule'
/**
 *替换对象中的键名
 * @param {data} Object 源数据,
 * @param {data2} Object 要替换的键值对对象,例如: {a:b}  b 键替换成 a
 * @return 替换完成的数据
 */
export function resetObjectData (data, data2) {
  for (const key in data2) {
    JSON.stringify(data).replace(new RegExp(data2[key], 'gm'), key)
    data = JSON.parse(JSON.stringify(data).replace(new RegExp(data2[key], 'gm'), key))
  }
  return data
}
Vue.prototype.$_resetObjectData = resetObjectData

/**
 * 将js代码中的px转为适配当前屏幕rem的px
 * @param  {num} Number 需要被转换的数字
 * @return num
 */
Vue.prototype.$_resetSize = function (num) {
  const clientWidth = document.documentElement.clientWidth
  const scale = clientWidth / 1920
  return scale * num
}

/**
 * 下载静态资源
 * @param {url} String 资源地址 (地址可访问)
 * @param {name} String 下载后的文件名
 */
Vue.prototype.$_uploadStaticFile = function (url, name) {
  var request = new XMLHttpRequest()
  // console.log(request)
  request.responseType = 'blob' // 定义响应类型
  request.open('GET', url)
  request.send()
  request.onload = function () {
    var elink = document.createElement('a')
    document.body.appendChild(elink)
    elink.href = window.URL.createObjectURL(this.response)
    elink.download = name
    elink.click()
    URL.revokeObjectURL(elink.href)
    document.body.removeChild(elink)
  }
}

/**
* 根据媒体文件的id下载文件流  并转换为blob类型src展示
* @param {id} 文件id
* @return {void}
*/
Vue.prototype.$_makeMediaSrc = async function (id) {
  const res = await uploadDocument(id)
  const blob = new Blob([res.data])
  const url = window.URL.createObjectURL(blob)
  return url
}
export async function _makeMediaSrc (id) {
  const res = await uploadDocument(id)
  const blob = new Blob([res.data])
  const url = URL.createObjectURL(blob)
  // // console.log(url)
  return url
}

/**
 * 下载请求回来的pdf文件流
 * @param {content}  文件流
 * @param {name}  文件名
 *
 */
Vue.prototype.$_uploadBlobFileLine = function (content, name, type) {
  const blob = new Blob([content], {
    type
  })
  // console.log(blob)
  if ('download' in document.createElement('a')) {
    // 非IE下载
    const elink = document.createElement('a')
    elink.download = name
    elink.style.display = 'none'
    elink.href = URL.createObjectURL(blob)
    document.body.appendChild(elink)
    elink.click()
    URL.revokeObjectURL(elink.href) // 释放URL 对象
    document.body.removeChild(elink)
  } else {
    // IE10+下载
    navigator.msSaveBlob(blob, name)
  }
}

Vue.prototype.$_downloadModel = function (content, name) {
  const blob = new Blob([content])
  // console.log(blob)
  if ('download' in document.createElement('a')) {
    // 非IE下载
    const elink = document.createElement('a')
    elink.download = name
    elink.style.display = 'none'
    elink.href = URL.createObjectURL(blob)
    document.body.appendChild(elink)
    elink.click()
    URL.revokeObjectURL(elink.href) // 释放URL 对象
    document.body.removeChild(elink)
  } else {
    // IE10+下载
    navigator.msSaveBlob(blob, name)
  }
}
/**
     * 开启新页面查看文档文件
     * @param {url} String 文件地址(完整地址)
     * @param {type} String 文件类型
     */
Vue.prototype.$_viewFile = async function (id, fileType) {
  const res = await uploadDocument(id)
  const blob = new Blob([res.data], { type: 'application/pdf' })
  const url = URL.createObjectURL(blob)
  window.open(url)
}

/**
* 检查使用权限
* @param {number} num
* @return {void}
*/
Vue.prototype.$_viewAuthorty = function (authorty) {
  // const authortyList = localStorage.getItem('authority')
  // console.log(authortyList)
}

/**
* 数字类型输入框(待完善)
* @param event
*event 事件（input）
* @param type
*type 类型{
      Inter：整数（如人、物的个数）
  signInter: 允许带正负号的整数（较昨日 +1 / -1）
      Float：浮点数（带小数点） 包含 \d.  如1.
  signFloat: 允许带正负号的浮点数
}
*/
Vue.prototype.$_takeNumber = function (event, type) {
  const value = event.target.value
  const firstVal = value[0]
  const acceptSignStart = ['+', '-']
  const regs = {
    Inter: /^\d+$/,
    signInter: /^[+-]?$|^[+-]?\d+$/
  }
  switch (type) {
    case 'Inter':
      if (regs[type].test(value)) {
        event.target.value = value
      } else {
        event.target.value = value.replace(/[^\d]/g, '')
      }
      break
    case 'signInter':
      if (regs[type].test(value)) {
        event.target.value = value
      } else {
        if (acceptSignStart.indexOf(firstVal) !== -1 && Number(value[1]) === 'NaN') {
          event.target.value = firstVal
          return
        }
        let newVal = ''
        value.replace(/([+-]?\d+)/g, (...args) => {
          newVal = args[0]
        })
        event.target.value = newVal
        // console.log(newVal)
      }
      break
    default:
      // console.error('Do not support')
      break
  }
}
